package com.xg.demo.observermode;

/**
 * Created with IntelliJ IDEA.
 *
 * @author hans
 * @version 1.0
 * @date 2023/04/24/14:25
 * @description 观察者模式测试
 */
public class ObserverTest {

    public static void main(String[] args) {
        // 1、创建目标对象 Observable
        ConcreteSubject subject = new ConcreteSubject();

        // 2、创建观察者
        ObserverA obj1 = new ObserverA();
        ObserverA obj2 = new ObserverA();
        ObserverA obj3 = new ObserverA();

        // 3、将上面三个观察者对象添加到目标对象 subject 的观察者容器中
        subject.addObserver(obj1);
        subject.addObserver(obj2);
        subject.addObserver(obj3);

        // 4、改变 subject 对象的状态
        subject.set(3000);
        System.out.println("---- 状态修改了 ----");

        // 5、观察者的状态发生了变化
        System.out.println(obj1.getMyState());
        System.out.println(obj2.getMyState());
        System.out.println(obj3.getMyState());

        subject.set(600);
        System.out.println("---- 状态修改了 ----");
        // 6、观察者的状态发生了变化
        System.out.println(obj1.getMyState());
        System.out.println(obj2.getMyState());
        System.out.println(obj3.getMyState());

        // 7、移除一个订阅者
        subject.deleteObserver(obj2);
        subject.set(200);
        System.out.println("---- 状态修改了 ----");
        // 8、观察者的状态发生了变化
        System.out.println(obj1.getMyState());
        System.out.println(obj2.getMyState());
        System.out.println(obj3.getMyState());
    }
}
